//rodowisko R dla pocztkujcych

//Rozdzia 8. - Odprawa u Imperatora
//John M. Quick

//Wykresy, grafy i diagramy w rodowisku R

//Tworzenie wykresu supkowego
> #ustaw katalog roboczy rodowiska R
> #zastp przykadow ciek tak, ktra jest odpowiednia dla Ciebie
> setwd("C:/Users/RUser/Strateg/")

> #zaaduj obszar roboczy dla rozdziau 8.
> load("rDlaPocztkujcych_R_08_KopiaDlaCzytelnika.RData")

> #stwrz wykres supkowy, ktry porwnuje rednie czasy trwania dla rnych metod walki
> #oblicz redni czas trwania dla kadej z metod walki
> meanDurationFire <- mean(subsetFire$CzasTrwaniaDni)
> meanDurationAmbush <- mean(subsetAmbush$CzasTrwaniaDni)
> meanDurationHeadToHead <- mean(subsetHeadToHead$CzasTrwaniaDni)
> meanDurationSurround <- mean(subsetSurround$CzasTrwaniaDni)
> #uyj wektora, by zdefiniowa wartoci dla wykresu supkowego
> barAllMethodsDurationBars <- c(meanDurationFire, meanDurationAmbush, meanDurationHeadToHead, meanDurationSurround)
> #uyj funkcji bar plot(...), by stworzy i wywietli wykres supkowy
> barplot(height = barAllMethodsDurationBars)

//Dopasowywanie grafiki

> #uyj dodatkowych argumentw, by dopasowa grafik do wasnych potrzeb
> #zdefiniuj tytu dla wykresu supkowego
> barAllMethodsDurationLabelMain <- "redni czas trwania bitwy w zalenoci od metody walki"
> #zdefiniuj osie x i y dla wykresu supkowego
> barAllMethodsDurationLabelX <- "Metoda walki"
> barAllMethodsDurationLabelY <- "Czas trwania bitwy [dni]"
> #ustal skal dla osi x i y
> barAllMethodsDurationLimX <- c(0, 5)
> barAllMethodsDurationLimY <- c(0, 120)
> #zdefiniuj rne kolory dla supkw
> barAllMethodsDurationRainbowColors <- rainbow(length(barAllMethodsDurationBars))
> #zmodyfikuj funkcj graficzn poprzez uycie argumentw main, xlab, ylab, xlim, ylim, names oraz col
> #uyj funkcji barplot(...), by stworzy i wywietli wykres supkowy
> barplot(height = barAllMethodsDurationBars, main = barAllMethodsDurationLabelMain, xlab = barAllMethodsDurationLabelX, ylab = barAllMethodsDurationLabelY, xlim = barAllMethodsDurationLimX, ylim = barAllMethodsDurationLimY, col = barAllMethodsDurationRainbowColors)

> #dodaj objanienia do wykresu supkowego
> #argumenty x i y definiuj pooenie objanie
> #mog one by sowami lub wsprzdnymi numerycznymi
> #argument legend zawiera wektor skadajcy si z nazw uywanych przy opisie wykresu
> barAllMethodsDurationLegendLabels <- c("Atak ogniowy", "Zasadzka", "Walka bezporednia", "Okrenie")
> #argument fill okrela kolor tekstw objanie
> legend(x = 0, y = 120, legend = barAllMethodsDurationLegendLabels, fill = barAllMethodsDurationRainbowColors)

//Tworzenie wykresu punktowego

> #stwrz wykres punktowy, ktry prezentuje zwizek midzy liczbami onierzy Shu i Wei biorcych udzia w przeszoci w atakach ogniowych 
> #zapamitaj dane, ktre zostan uyte na wykresie
> scatterplotFireWeiSoldiersData <- subsetFire$onierzeWei
> scatterplotFireShuSoldiersData <- subsetFire$onierzeShu
> #dopasuj wykres
> scatterplotFireSoldiersLabelMain <- "onierze biorcy udzia w przeszoci w atakach ogniowych"
> scatterplotFireSoldiersLabelX <- "Wei"
> scatterplotFireSoldiersLabelY <- "Shu"
> #uyj funkcji plot(...), by stworzy i wywietli wykres punktowy
plot(x = scatterplotFireWeiSoldiersData, 
y = scatterplotFireShuSoldiersData, 
main = scatterplotFireSoldiersLabelMain, 
xlab = scatterplotFireSoldiersLabelX, 
ylab = scatterplotFireSoldiersLabelY)

> #stwrz wykres punktowy, ktry prezentuje zwizki midzy wszystkimi zmiennymi w zbiorze danych dotyczcym atakw ogniowych
> plot(x = subsetFire)

//Tworzenie wykresu liniowego

> #stwrz wykres liniowy, ktry wywietla czasy trwania minionych atakw ogniowych
> #pobierz dane, ktre zostan uyte na wykresie
> lineFireDurationDataX <- c(1:30)
> lineFireDurationDataY <- subsetFire$CzasTrwaniaDni
> #dopasuj wykres do naszych potrzeb
> lineFireDurationMain <- "Czas trwania atakw ogniowych w przeszoci"
> lineFireDurationLabX <- "Numer bitwy"
> lineFireDurationLabY <- "Czas trwania [dni]"
> #uyj argumentu type, aby poczy punkty danych liniami
> lineFireDurationType <- "o"
> #uyj funkcji plot(...), aby stworzy i wywietli wykres liniowy
> plot(x = lineFireDurationDataX, y = lineFireDurationDataY, main = lineFireDurationMain, xlab = lineFireDurationLabX, ylab = lineFireDurationLabY, type = lineFireDurationType)

//Tworzenie wykresu skrzynkowego

> #utwrz wykres skrzynkowy, ktry wywietli liczb onierzy wymagan do przeprowadzenia ataku ogniowego
> #pobierz dane wymagane do narysowania wykresu
> boxplotFireShuSoldiersData <- subsetFire$onierzeShu
> #dopasuj wykres do wasnych potrzeb
> boxPlotFireShuSoldiersLabelMain <- "Liczba onierzy Shu wymagana do przeprowadzenia ataku ogniowego"
> boxPlotFireShuSoldiersLabelX <- "Metoda ataku ogniowego"
> boxPlotFireShuSoldiersLabelY <- "Liczba onierzy"
> #uyj funkcji boxplot(...), by stworzy i wywietli wykres skrzynkowy
> boxplot(x = boxplotFireShuSoldiersData, 
main = boxPlotFireShuSoldiersLabelMain, 
xlab = boxPlotFireShuSoldiersLabelX, 
ylab = boxPlotFireShuSoldiersLabelY)

> #utwrz wykres skrzynkowy, ktry porwnuje liczby onierzy dla rnych metod walki
> #pobierz dane wymagane do narysowania wykresu
> boxplotAllMethodsShuSoldiersData <- battleHistory$onierzeShu ~ battleHistory$Metoda
> #dopasuj wykres do wasnych potrzeb
> boxPlotAllMethodsShuSoldiersLabelMain <- "Liczby onierzy dla rnych metod walki"
> boxPlotAllMethodsShuSoldiersLabelX <- "Metoda walki"
> boxPlotAllMethodsShuSoldiersLabelY <- "Liczba onierzy"
> #uyj funkcji boxplot(...), by stworzy i wywietli wykres skrzynkowy
> boxplot(formula = boxplotAllMethodsShuSoldiersData, 
main = boxPlotAllMethodsShuSoldiersLabelMain, 
xlab = boxPlotAllMethodsShuSoldiersLabelX, 
ylab = boxPlotAllMethodsShuSoldiersLabelY)

//Tworzenie histogramu

> #stwrz histogram, ktry prezentuje rozkad czstoci czasu trwania atakw ogniowych w przeszoci
> #pobierz dane niezbdne do wykonania wykresu
> histFireDurationData <- subsetFire$CzasTrwaniaDni
> #dopasuj wykres do wasnych potrzeb
> histFireDurationDataMain <- "Czas trwania historycznych atakw ogniowych"
> histFireDurationLabX <- "Czas trwania [dni]"
> histFireDurationLabY <- "Czsto"
> histFireDurationLimY <- c(0, 10)
> histFireDurationRainbowColor <- rainbow(max(histFireDurationData))
> #uyj funkcji hist(...), by stworzy i wywietli histogram
> hist(x = histFireDurationData, 
main = histFireDurationDataMain, 
xlab = histFireDurationLabX, 
ylab = histFireDurationLabY, 
ylim = histFireDurationLimY, 
col = histFireDurationRainbowColor)

//Tworzenie wykresu koowego

> #stwrz wykres koowy, ktry prezentuje koszt przeprowadzenia ataku ogniowego przy uwzgldnieniu zasobw przydzielonych armii Shu
> #pobierz dane niezbdne do stworzenia wykresu
> #jaki jest koszt proponowanego ataku ogniowego?
> functionGoldCost(2500, 225, 7)
[1] 6791.667
> #wiemy ju, e armii Shu zostao przydzielonych 1000000 sztuk zota
> #dlatego zasoby pozostae po przeprowadzeniu ataku ogniowego bd wynosi 993208 sztuk zota
> #stwrz wektor przechowujcy wartoci elementwwykresu koowego
> pieFireGoldCostSlices <- c(6792, 993208)
> #uyj argumentu label, aby zdefiniowa opis zwizany z kadym elementem wykresu koowego
> pieFireGoldCostLabels <- c("koszt misji", "pozostajce zasoby")
> #dopasuj wykres do wasnych potrzeb
> pieFireGoldCostMain <- "Koszt ataku ogniowego"
> pieFireGoldCostSpecificColors <- c("green", "blue")
> #uyj funkcji pie(...), aby stworzy i wywietli wykres koowy
> pie(x = pieFireGoldCostSlices, 
labels = pieFireGoldCostLabels, main = pieFireGoldCostMain, 
col = pieFireGoldCostSpecificColors)

> #uyj funkcji legend(...), aby doda opisy do wykresu
> legend(x = "bottom", legend = pieFireGoldCostLabels, fill = pieFireGoldCostSpecificColors)

//Eksportowanie grafiki

> #uyj funkcji eksportu, by zapisa grafik jako obraz cyfrowy
> #przygotuj rodowisko R do eksportowania grafiki w jednym z nastpujcych formatw: pdf, png, jpg, tiff lub bmp
> #pamitaj, e Twj obraz zostanie zapisany w katalogu roboczym rodowiska R, jeli podasz jedynie nazw pliku
> #w przeciwnym razie obraz zostanie zapisany w lokalizacji odpowiadajcej podanej ciece
> #argumenty width i height s opcjonalne i oznaczaj wymiary w pionie i poziomie (w pikselach) wynikowego obrazu 
> #wyeksportuj jako pdf
> pdf("mojaGrafika.pdf", width = 500, height = 500)
> #LUB
> #wyeksportuj jako png
> png("mojaGrafika.png", width = 500, height = 500)
> #LUB
> #wyeksportuj jako jpg
> jpeg("mojaGrafika.jpg", width = 500, height = 500)
> #LUB
> #wyeksportuj jako tiff
> tiff("mojaGrafika.tiff", width = 500, height = 500)
> #LUB
> #wyeksportuj jako bmp
> bmp("mojaGrafika.bmp", width = 500, height = 500)

> #stwrz odpowiedni grafik w rodowisku R
> #pamitaj, e Twoja grafika moe NIE zosta wywietlona w oknie graficznym podczas wykonywania tego kodu
> #jako przykadu uyjemy naszego pierwotnego wykresu koowego dotyczcego kosztw przeprowadzenia bitwy
> #uyj funkcji pie(...), by stworzy wykres koowy
> pie(x = pieFireGoldCostSlices, 
labels = pieFireGoldCostLabels, 
main = pieFireGoldCostMain, 
col = pieFireGoldCostSpecificColors)
> #uyj funkcji legend(...), by doda opis do wykresu
> legend(x = "bottom", legend = pieFireGoldCostLabels, fill = pieFireGoldCostSpecificColors)

> #uyj funkcji dev.off(), aby zamkn biece urzdzenie i wyeksportowa grafik jako obraz cyfrowy
> dev.off()

> #sprawd, czy zosta utworzony odpowiedni obraz cyfrowy

> #wasna funkcja, ktra pozwoli na zapisanie grafiki ze rodowiska R w postaci obrazu cyfrowego
> exportGraphic <- function(filename, filetype, width, height, graphicsFunction)
+{
+	filetype(filename, width = width, height = height) 
+	graphicsFunction 
+	dev.off()
+}

//Zapamitaj obszar roboczy i tre konsoli

> #zapisz zawarto swojego obszaru roboczego R w nowym pliku
> #pamitaj o dodaniu rozszerzenia .RData
> save.image("rDlaPocztkujcych_R_08_mjObszarRoboczy.RData")

> #zapisz zawarto swojej konsoli R poprzez skopiowanie i wklejenie treci do pliku teksowego